#include <iostream>

#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <wait.h>
#include <pthread.h>
void *run(void *)
{
    while (true)
    {
        std::cout << "new thread,pid:" << getpid() << std::endl;
        sleep(1);
    }
}

int main()
{
    std::cout << "我是进程,pid:" << getpid() << std::endl;
    pthread_t id;
    pthread_create(&id, nullptr, run, (void *)"thread_1");
    while (true)
    {
        std::cout << "main thread,pid:" << getpid() << std::endl;
        sleep(1);
    }
    return 0;
}

// void handler(int signo)
// {
//     // std::cout << "get a signo:" << signo << "i am:" << getpid() << std::endl;
//     while (true)
//     {
//         pid_t rid = waitpid(-1, nullptr, WNOHANG);
//         if (rid > 0)
//             std::cout << "回收子进程成功,pid:" << rid << std::endl;
//         else if (rid == 0)
//         {
//             std::cout << "退出子进程都已回收完毕" << std::endl;
//             break;
//         }
//         else // rid < 0
//         {
//             std::cout << "wait error" << std::endl;
//             break;
//         }
//     }
// }

// int main()
// {
//     ::signal(SIGCHLD, SIG_IGN);
//     for (int i = 0; i < 10; i++)
//     {
//         pid_t id = fork();
//         if (id == 0)
//         {
//             sleep(2);
//             std::cout << "子进程退出" << std::endl;
//             exit(0);
//         }
//     }
//     while (true)
//     {
//         sleep(1);
//     }
//     return 0;
// }

// int main()
// {
//     // signal(SIGCHLD, handler);
//     ::signal(SIGCHLD,SIG_IGN);
//     for (int i = 0; i < 10; i++)
//     {
//         pid_t id = fork();
//         if (id == 0)
//         {
//             //一部分先退
//             if (i % 2 == 0)
//             {
//                 sleep(2);
//                 std::cout << "子进程退出" << std::endl;
//                 exit(0);
//             }
//             //一部分后退
//             else
//             {
//                 sleep(4);
//                 std::cout << "子进程退出" << std::endl;
//                 exit(0);
//             }
//         }
//     }
//     while (true)
//     {
//         sleep(1);
//     }
//     return 0;
// }